/*
 * @Author: pengtianrui 2276608413@qq.com
 * @Date: 2024-07-19 14:42:56
 * @LastEditors: 武兴创 superjava@vip.qq.com
 * @LastEditTime: 2024-08-30 14:30:46
 * @FilePath: \SGFEM\DataStructure\FEM\Element\include\CONM1Data.h
 * @Description:6*6对称质量单元数据
 * 考虑对称性，只有21个独立的值。导入和写出时只填充或者保存下三角部分
 * CONM1
 */
#pragma once
#include "Utility/Algebra/Matrix.h"

#include "DataStructure/Common/DataStructureNamespace.h"
#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Real.h"
#include "DataStructure/Input/Element/ElementBase.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN
struct DECLSPEC CONM1Data : public ElementBase
{
    CONM1Data ();
    explicit CONM1Data (SG::DataStructure::Common::I64 eId);

    SG::DataStructure::Common::Id   m_g[1]  = { 0 };    ///< 节点号
    SG::DataStructure::Common::Id   m_cId   = 0;        ///< 单元坐标系
    SG::DataStructure::Common::Real m_m1[1] = { 0.0 };  /// 下三角矩阵第一行，1个值
    SG::DataStructure::Common::Real m_m2[2] = { 0.0 };  /// 下三角矩阵第二行，2个值
    SG::DataStructure::Common::Real m_m3[3] = { 0.0 };  /// 下三角矩阵第三行，3个值
    SG::DataStructure::Common::Real m_m4[4] = { 0.0 };  /// 下三角矩阵第四行，4个值
    SG::DataStructure::Common::Real m_m5[5] = { 0.0 };  /// 下三角矩阵第五行，5个值
    SG::DataStructure::Common::Real m_m6[6] = { 0.0 };  /// 下三角矩阵第六行，6个值
                                                        ///< 保留矩阵下三角部分的6个数组，质量系数
    SG::DataStructure::Common::Id m_domainId = 0;

    SG::Algebra::Matrixd FillUperTriangle () const;
};

/// @brief 判断两个CONM1Data是否相等
/// @param a
/// @param b
/// @return
DECLSPEC bool operator== (const CONM1Data& a, const CONM1Data& b);

SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE